using System;
using System.Web;

namespace WCPierce.Web
{
    public sealed class CallBackHelper
    {
        private CallBackHelper() { }

        public static bool IsCallBack
        {
            get
            {
                HttpRequest hr = CallBackHelper.GetHttpRequest();
                return hr.Params["IsCallBack"] != null;
            }
        }

        public static void Write(string Text)
        {
            HttpResponse hr = CallBackHelper.GetHttpResponse();

            hr.Clear();
            hr.StatusCode = 200;
            hr.StatusDescription = "OK";
            hr.Write(Text);
            hr.Flush();
            hr.End();
        }

        public static void HandleError(Exception e)
        {
            HttpResponse hr = CallBackHelper.GetHttpResponse();

            hr.Clear();
            hr.StatusCode = 200;
            hr.StatusDescription = "ERROR";
            hr.Write(e.ToString());
            hr.Flush();
            hr.End();
        }

        private static HttpResponse GetHttpResponse()
        {
            HttpResponse hr = null;
            try
            {
                hr = System.Web.HttpContext.Current.Response;
            }
            catch (NullReferenceException nre)
            {
                throw new Exception("CallBackHelper could not access current HttpResponse object", nre);
            }

            return hr;
        }

        private static HttpRequest GetHttpRequest()
        {
            HttpRequest hr = null;
            try
            {
                hr = System.Web.HttpContext.Current.Request;
            }
            catch (NullReferenceException nre)
            {
                throw new Exception("CallBackHelper could not access current HttpRequest object", nre);
            }

            return hr;
        }
    }
}
